package com.trainbook.common.result;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.ToString;

import java.util.HashMap;

@Data
@ToString
@ApiModel(value = "返回结果类")
public class JsonResult extends HashMap<String, Object> {

    public static final int SUCCESS = 0;
    public static final int ERROR = 1;

    @ApiModelProperty(value = "状态码")
    private int errorCode;
    /**
     * 错误消息
     */
    @ApiModelProperty(value = "状态信息")
    private String message;
    /**
     * 返回正确时候的数据
     */
    @ApiModelProperty(value = "返回数据")
    private Object data;

    public JsonResult() {
    }

    /**
     * 返回错误消息
     *
     * @return 错误消息
     */
    public static JsonResult error() {
        return error(1, "操作失败");
    }

    /**
     * 返回错误消息
     *
     * @param msg 内容
     * @return 错误消息
     */
    public static JsonResult error(String msg) {
        return error(500, msg);
    }

    /**
     * 返回错误消息
     *
     * @param errorCode 错误码
     * @param message   内容
     * @return 错误消息
     */
    public static JsonResult error(int errorCode, String message) {
        JsonResult json = new JsonResult();
        json.put("errorCode", errorCode);
        json.put("message", message);
        return json;
    }

    /**
     * 返回成功消息
     *
     * @param message 内容
     * @return 成功消息
     */
    public static JsonResult success(String message) {
        JsonResult json = new JsonResult();
        json.put("message", message);
        json.put("errorCode", 0);
        return json;
    }

    /**
     * 返回成功消息
     *
     * @return 成功消息
     */
    public static JsonResult success() {
        return JsonResult.success("操作成功");
    }

    @Override
    public JsonResult put(String key, Object value) {
        super.put(key, value);
        return this;
    }

    public static JsonResult result(String msg) {
        JsonResult json = new JsonResult();
        if ("SUCCESS".equals(msg)) {
            json.put("errorCode", SUCCESS);
            ;
        } else {
            json.put("errorCode", ERROR);
            ;
        }
        json.put("message", msg);
        return json;
    }

    public static JsonResult result(Object data) {
        JsonResult json = new JsonResult();
        json.put("message", "SUCCESS");
        json.put("errorCode", 0);
        json.put("data", data);
        return json;
    }

    /**
     * 响应返回结果
     *
     * @param b 结果
     * @return 操作结果
     */
    public static JsonResult toJsonResult(Boolean b) {
        return b ? success() : error();
    }

    public JsonResult(Throwable e) {
        errorCode = ERROR;
        message = e.getMessage();
    }

    public JsonResult(int state, Throwable e) {
        this.errorCode = state;
        this.message = e.getMessage();
    }


}
